A good software engineering practice mandates the use of modular programming to make the system separable in modules. This technique, allows designers to extend the system easily and to make the design process more adaptive \cite{modular_design} without changing its core functionality. Should we consider adding any extensions in the future we will have greatly benefited having followed such an approach. 

Our system is comprised of four distinct modules which are covered in detail below. 
\begin{enumerate}
  \item The Recommender Module
  \item The Community Module
  \item The Feedback Module
  \item The Profiler Module
\end{enumerate}



